package com.tedu.api.io;

import java.io.Serializable;
import java.util.Arrays;

/**
 * Person.java 类
 *
 * IO流--高级流--针对传对象
 * Person.java对象具备如下功能：
 * 1.实现序列化接口  Serializable序列化接口---提供功能
 * 序列化接口：Person.java----JDK中虚拟机--转成Person.java【字节码文件】
 *           对象转换成二进制---序列化接口实现
 * 2.静态常量值：对象输入流--对象输出流
 * InvalidClassException 类版本号转换异常
 * 原因：序列化或者反序列化操作，传输类---指定版本号--改Person.java
 *                                             自动重新生成一个版本
 *  serialVersionUID = 3882646975644678005//name、say属性
 *  serialVersionUID = 4512839810389990867//name\say\age属性
 *
 * 练习：1.对象输入流、对象输出流---实现标准流
 *     2.Person 对象  实现Serializable删掉，测试对象输出流是否正常写出
 */
public class Person implements Serializable {
    //版本号：绝对反序列化是否成功【字节文件转换为对象】唯一标识
    //类实现Serializable接口，具备序列化功能，类自动生成版本号
    //建议：重写版本号
    //每次增加代码或者减少代码，统一版本号，读入【反序列化成功】
    //JavaBean：Java豆子---按照规范编写实体类
    private static final long serialVersionUID=2L;
    private String name; //私有属性
    private String[] say;
    public int age;
    //创建空参构造器

    public Person() {
    }
    //有参构造器
    public Person(String name, String[] say) {
        this.name = name;
        this.say = say;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String[] getSay() {
        return say;
    }

    public void setSay(String[] say) {
        this.say = say;
    }

    //重写：Object toString() 打印对象地址值    对象名@ERD2
    //重写目的：不想看地址值，看对象属性值
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", say=" + Arrays.toString(say) +
                '}';
    }
}
